package com.java.comprehensive.arithmetic.leecode.easy;

/**
 * @program: comprehensive-service
 *
 * @description: 二进制求和
 *
 * @author: 窦绍飞
 *
 * @create: 2021-11-24 09:54
 **/
public class LeetCode_67 {

	public static String addBinary(String a, String b) {
		return add2(a, b);

	}

	// 那就使用简单思路，逐位相加
	private static String add2(String a, String b) {
		StringBuilder s = new StringBuilder();
		int c = 0; // 进位
		for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
			int a1 = i >= 0 ? a.charAt(i) - '0' : 0;
			int b1 = j >= 0 ? b.charAt(j) - '0' : 0;
			int tmp = a1 + b1 + c;

			if (tmp < 2) // 小于2 没有产生进位
			{
				s.append(tmp);
				c = 0;
			} else if (tmp == 2) // 进位为 1 ，本位为0
			{
				s.append("0");
				c = 1;
			} else {
				s.append("1"); // 进位为 1 ，接受上次进位的1 ， 本位 为 1
				c = 1;
			}
		}
		if (c == 1) {
			s.append("1");
		}
		return s.reverse().toString();
	}

	public static void main(String[] args) {
		String a = "11";
		String b = "110";
		System.out.println(addBinary(a, b));
	}

}
